﻿#pragma once

#ifndef BRIDGEANALYSIS_ANALYSIS_DLL_H
#define BRIDGEANALYSIS_ANALYSIS_DLL_H

// 手动事件表
struct TDLLTPRGListItem
{
    float ts;           // 起始时间(min.)
    float te;           // 结束时间(min.)
    EVENT event;        // 时间事件
    TPRGPARA paraValue; // 参数值

#ifdef _USRDLL
    TDLLTPRGListItem() : ts((float)0.0), te((float)0.0), event(NOEVENT), paraValue()
    {
    }
#endif
};

// 事件表描述
struct TDLLTPRGINF
{
    TDLLTPRGListItem *head;
    int32_t len;
    LPINT num;

#ifdef _USRDLL
    TDLLTPRGINF() : head(nullptr), len(0), num(nullptr)
    {
    }
#endif
};

// 峰辨识参数描述
struct TDLLIPINF
{
    TIPara *ipara;        // 峰辨识参数 TDLLIPARA *
    TDLLTPRGINF *tprgInf; // 时间表描述 TDLLTPRGINF *

#ifdef _USRDLL
    TDLLIPINF() : ipara(nullptr), tprgInf(nullptr)
    {
    }
#endif
};

// 分段校正数据项
struct TSegCalibItem
{
    double x; // 校正段X值上限
    double a; // 校正段直线斜率
    double b; // 校正段直线截距

#ifdef _USRDLL
    TSegCalibItem() : x(0), a(0), b(0)
    {
    }
#endif
};

struct TCompList;
struct TAnalResult;
// 组份表
struct TDLLIDTListItem
{
    float f0;                         // 校正因子常数项
    float f1;                         // 校正因子一次项
    float f2;                         // 校正因子二次项
    float f3;                         // 校正因子三次项
    float k;                          // 扩充系数k
    float k1;                         // 扩充系数k1
    float cLower;                     // 品控下限
    float cUpper;                     // 品控上限
    float r;                          // 最小二乘法求取校正因子的相关系数
    E_BASEDON basedOn;                // 定量基准(0-面积, 1-峰高)
    double weight;                    // 组份重量
    char Name[B32];                   // 组份名
    float Time;                       // 保留时间(min.)
    float band;                       // 带宽(min.)
    int16_t istdNoSelf;               // 拟引入的内标物号
    int16_t TypeEx;                   //
    int16_t istdNoUsed;               // 被标定的内标物号
    int16_t Reserve;                  // 显示顺序
    int32_t SegCalibMode;             // 分段校正模式 (0-不分段, 1-低位过零, 2-点点连线)
    int32_t SegCalibCount;            // 校正段数
    TSegCalibItem SegCalibItems[C16]; // 分段校正数据
    int32_t ConcUnitFactor;           // 浓度单位因子值(0-使用配样信息中指定的含量单位, 2+UNIT_N:%, 3+UNIT_N:‰, 6+UNIT_N:ppm, 9+UNIT_N:ppb, 12+UNIT_N:ppt)
    int32_t Reserve_;                 //(保留)
    int32_t HPGOperator;              // 高纯气专用版限值算符
    float HPGLimitValues[3];          // 高纯气专用版限值
    float RefRTime;                   // 参考保留时间
    BYTE Reserves[120 - 3 * sizeof(int32_t) - 4 * sizeof(float)];

#ifdef _USRDLL
    TDLLIDTListItem() : f0((float)0.0), f1((float)0.0), f2((float)0.0), f3((float)0.0), k((float)0.0), k1((float)0.0),
                        cLower((float)0.0), cUpper((float)0.0), r((float)0.0), basedOn(ON_AREA), weight((double)0.0), Time((float)0.0), band((float)0.0),
                        istdNoSelf(0), TypeEx(0), istdNoUsed(0), Reserve(0), SegCalibMode(0), SegCalibCount(0),
                        ConcUnitFactor(0), Reserve_(0), HPGOperator(0), HPGLimitValues{(float)0.0, (float)0.0, (float)0.0}, RefRTime(0)
    {
        std::fill_n(Name, sizeof(Name), '\0');
        std::fill_n(Reserves, sizeof(Reserves), '\0');
        for (int32_t i = 0; i < C16; i++)
        {
            SegCalibItems[i].x = 0;
            SegCalibItems[i].a = 0;
            SegCalibItems[i].b = 0;
        }
    }
    TDLLIDTListItem &operator=(const TCompList &src);
#endif
};

// 组份表描述
struct TDLLIDTINF
{
    TDLLIDTListItem *head; // 组份表缓区头指针
    int32_t len;           // 缓区长
    LPINT num;

#ifdef _USRDLL
    TDLLIDTINF() : head(nullptr), len(0), num(nullptr)
    {
    }
#endif
};

struct TDLLResultListItem
{
    double Area;       // 峰面积(uV*s)
    double AreaPer;    // 面积%
    double Conc;       // 含量
    double Areas;      // 峰起点面积(uV*s)
    double Arear;      // 峰顶点面积(uV*s)
    double Areae;      // 峰落点面积(uV*s)
    double ALeft;      // 左峰面积
    double ARight;     // 右峰面积
    int32_t Idno;      // 组份号
    char Name[B32];    // 组份名
    float RTime;       // 保留时间(min.)
    float Height;      // 峰高(uV)
    char TypeCode[B4]; // 峰类型码
    float W50;         // 半高峰宽(min.)
    float Sigma5;      // 5Sigma峰宽(min.)
    float Plates;      // 理论塔片数 = 5.545*(Tr/W50)^2
    float Resolution;  // 分离度= 2.35478/2*(Tr2-Tr1)/(W50_2+W50_1)
    float Symmetry;    // USP拖尾因子 = 5%峰高宽/(2*5%峰高的左宽)
    float M1;          // 统计要素中的平均保留时间
    float M2;          // 统计要素中的峰畸变(展宽)
    float fts;         // 峰起点时间
    float fte;         // 峰落点时间
    int32_t ts;        // 峰起点时间(与采样频率有关)
    float tr;          // 峰顶点时间(与采样频率有关)
    int32_t te;        // 峰落点时间(与采样频率有关)
    float hs;          // 峰起点高度(uV)
    float hsv;         // 峰起点与积分基线垂直相交处的高度(uV)
    float hr;          // 峰顶点高度(uV)
    float he;          // 峰落点高度(uV)
    float hev;         // 峰落点与积分基线垂直相交处的高度(uV)
    char ReserveX[B4]; // 保留字段X

#ifdef _USRDLL
    TDLLResultListItem() : Area((double)0.0), AreaPer((double)0.0), Conc((double)0.0), Areas((double)0.0), Arear((double)0.0),
                           Areae((double)0.0), ALeft((double)0.0), ARight((double)0.0), Idno(0), RTime((float)0.0),
                           Height((float)0.0), W50((float)0.0), Sigma5((float)0.0), Plates((float)0.0), Resolution((float)0.0),
                           Symmetry((float)0.0), M1((float)0.0), M2((float)0.0), fts((float)0.0), fte((float)0.0),
                           ts(0), tr((float)0.0), te(0), hs((float)0.0), hsv((float)0.0),
                           hr((float)0.0), he((float)0.0), hev((float)0.0)

    {
        std::fill_n(Name, sizeof(Name), '\0');
        std::fill_n(TypeCode, sizeof(TypeCode), '\0');
        std::fill_n(ReserveX, sizeof(ReserveX), '\0');
    }
    TDLLResultListItem& operator=(const TAnalResult& src);
#endif
};

// 结果表描述
struct TDLLRESINF
{
    TDLLResultListItem *head; // 结果表缓区头指针
    int32_t len;              // 缓区长
    LPINT num;                // 缓区项目数指针 int32_t *

#ifdef _USRDLL
    TDLLRESINF() : head(nullptr), len(0), num(nullptr)
    {
    }
#endif
};

struct TRAWBAG
{
    LPINT head;  // 样品谱图数据缓区头
    int32_t len; // 谱图数据缓区长
    LPINT time;  // 时间计数指针
    PFLOAT freq; //

#ifdef _USRDLL
    TRAWBAG() : head(nullptr), len(0), time(nullptr), freq(nullptr)
    {
    }
#endif
};

// 样品数据包
struct TSMPBAG
{
    LPVOID metric; // TDLLMETRIC *metric; 样品计量信息描述
    LPVOID rawbag; // RAWBAG	*rawbag; 谱图数据包
    LPINT Base;    // int32_t	*base; 基线谱图数据缓区头
    int32_t baseMaxTime;

#ifdef _USRDLL
    TSMPBAG() : metric(nullptr), rawbag(nullptr), Base(nullptr), baseMaxTime(0)
    {
    }
#endif
};

// 标样用量表
struct TSTDAMTListItem
{
    TDLLMETRIC metric; // 标样用量
    int32_t repNum;    // 重复进样次数 (每个标样的重复进样次数可能不同)
    int32_t reserved;

#ifdef _USRDLL
    TSTDAMTListItem() : metric(), repNum(0), reserved(0)
    {
    }
#endif
};

// 标样用量表描述
struct TAMTINF
{
    TSTDAMTListItem *head; // 组份用量表缓区头指针
    int32_t len;           // 缓区长(即允许最多的校正点数)
    LPINT num;             // 缓区项目数(即校正点数)指针 int32_t *

#ifdef _USRDLL
    TAMTINF() : head(nullptr), len(0), num(nullptr)
    {
    }
#endif
};

// 标样组份浓度表
struct TSTDCPTListItem // 以下项目依次按点序、重复次序、组份号的顺序连续排列
{
    double weight; // 各组份浓度
    double area;   // 各组份峰面积
    float height;  // 各组份峰高
    int32_t Reserved;

#ifdef _USRDLL
    TSTDCPTListItem() : weight((double)0.0), area((double)0.0), height((float)0.0), Reserved(0)
    {
    }
#endif
};

// 标样组份浓度表描述
struct TCPTINF
{
    TSTDCPTListItem *head; // 组份浓度表缓区头指针
    int32_t len;           // 缓区长
    LPINT num;             // 缓区项目数(校正点数*组份数)指针 int32_t *

#ifdef _USRDLL
    TCPTINF() : head(nullptr), len(0), num(nullptr)
    {
    }
#endif
};

// 标样表描述
struct TDLLSTDINF
{
    int32_t CurveType; // 校正次数  0 直线 1 二次 2 三次
    int32_t Zero;      // 过零  0 1 2
    TAMTINF *amtInf;   // 标样用量表描述
    TCPTINF *cptInf;   // 标样组份浓度表描述

#ifdef _USRDLL
    TDLLSTDINF() : CurveType(0), Zero(0),
                   amtInf(nullptr), cptInf(nullptr)
    {
    }
#endif
};

// 分组表
struct TDLLGROUPListItem
{
    double Area;    // 组累计峰面积
    double Height;  // 组累计峰高
    double AreaPer; // 组累计面积%
    double Conc;    // 组累计含量
    float TrLower;  // 保留时间上限(min.)
    float TrUpper;  // 保留时间上限(min.)
    char Name[B32]; // 组名

#ifdef _USRDLL
    TDLLGROUPListItem() : Area((double)0.0), Height((double)0.0), AreaPer((double)0.0), Conc((double)0.0),
                          TrLower((float)0.0), TrUpper((float)0.0)
    {
        std::fill_n(Name, sizeof(Name), '\0');
    }
#endif
};

// 分组表缓冲结构
struct TDLLGRPINF
{
    TDLLGROUPListItem *head; // 分组表缓区头指针
    int32_t len;             // 缓区长
    LPINT num;

#ifdef _USRDLL
    TDLLGRPINF() : head(nullptr), len(0), num(nullptr)
    {
    }
#endif
};

//	峰处理参数描述
struct TDLLEPINF
{
    TEPara *epara;      // 峰辨识参数描述 TDLLEPARA *
    TDLLGRPINF *grpInf; // 分组表描述 TDLLGroupInf *

#ifdef _USRDLL
    TDLLEPINF() : epara(nullptr), grpInf(nullptr)
    {
    }
#endif
};

struct TMiscellaneous // analysis.dll中杂项参数
{
    int32_t QualitMode;     // 定量模式 [0-时间带, 1-时间窗, 2-顺序法]
    BOOL RefEnabled;        // 参考峰启用标志
    BOOL IstdAsRef;         // 内标组分是否视作为参考峰
    BOOL Reserve;           //(保留)
    double IdtWindow;       // 组分表时间窗[%]
    double IdtTimeOfs;      // 进样偏移时间[min]
    TUkPkFactor UkPkFactor; // 未知峰校正因子
    double XMinUnitK;       // X轴标注单位(默认min)到最小标注单位(算面积用,默认sec)的换算系数(XMinUnit=XMinUnitK*XUnit, 默认=60)
    double YMinUnit;        // 信号值最小度量单位(uV)到采集器最小度量单位(1uV)的转换系数(默认值=100)

#ifdef _USRDLL
    TMiscellaneous() : QualitMode(0), RefEnabled(1), IstdAsRef(0), Reserve(0), IdtWindow((float)0.0), IdtTimeOfs((float)0.0),
                       UkPkFactor(), XMinUnitK((float)60.0), YMinUnit(100)
    {
    }
#endif
};

// 积分模块封装
class CAnalysis
{
public:
    CAnalysis();

    BOOL InitAnalPool(int32_t maxChannels, int32_t realChannels, void (*drawTickMark)(int32_t ch, int32_t time, TICKMARK tickmark));
    //	功能：初始化通道分析池
    //	参数：
    //		int32_t maxChannels: 允许最大的分析通道数
    //		int32_t realChannels: 最大的实时通道数
    //		void (*drawTickMark)(int32_t ch, int32_t, TICKMARK) : 显示峰辨识标志的函数指针
    //	返回值:
    //		TRUE: 成功
    //		FALSE: 失败

    BOOL ExitAnalPool();
    //	功能：释放通道分析池
    //	参数：(无)
    //	返回值:
    //		TRUE: 成功
    //		FALSE: 失败

    int32_t GetAnalPoolVolume(int32_t *maxReal = NULL, int32_t *maxRedo = NULL);
    //	功能：获取分析池中允许的最大通道数
    //	参数：
    //		int32_t *maxReal: 实时通道数指针
    //		int32_t *maxRedo: 后处理通道数指针
    //	返回值：最大通道数(包括实时通道数与后处理通道数)

    BOOL OpenAnal(int32_t ch, TSMPBAG *smpBag, TDLLIPINF *ipInf, TDLLEPINF *epInf, TDLLIDTINF *idtInf, TDLLRESINF *resInf, TDLLSTDINF *stdInf = NULL);
    //	功能：打开指定的分析通道
    //	参数：
    //		int32_t ch: 指定的通道号 (0,1为实时通道；其它值为后处理通道)
    //		SMPBAG *smpBag: 样品数据包结构指针
    //		IPINF *ipInf: 峰辨识参数描述结构指针
    //		EPINF *epInf: 峰处理参数描述结构指针
    //		IDTINF *idtInf: 组份表描述结构指针
    //		RESINF *resInf: 结果表描述结构指针
    //		STDINF *stdInf: 标样表描述结构指针
    //	返回值:
    //		TRUE: 成功
    //		FALSE: 失败

    BOOL CloseAnal(int32_t ch);
    //	功能：关闭指定通道的分析 (该函数与InitAnal函数成对)
    //	参数：
    //		int32_t ch: 指定的通道号
    //	返回值:
    //		TRUE: 成功
    //		FALSE: 失败

    BOOL StartAnal(int32_t ch);
    //	功能：启动指定通道的分析过程
    //	参数：
    //		int32_t ch: 指定的通道号
    //	返回值:
    //		TRUE: 成功
    //		FALSE: 失败

    BOOL StopAnal(int32_t ch);
    //	功能：停止指定通道的分析过程
    //	参数：
    //		int32_t ch: 指定的通道号
    //	返回值:
    //		TRUE: 成功
    //		FALSE: 失败

    CODE ExecAnal(int32_t ch);
    //	功能：执行指定通道的分析过程 (该函数需在调用InitAnal后循环调用)
    //	参数：
    //		int32_t ch: 指定的通道号
    //	返回值: 分析过程状态码
    //		ANAL_OK：运行过程正常
    //		ANAL_STOP：运行过程已告停止
    //		ANAL_TEST：正自动测试出两个重要的峰辨识参数：“最小峰宽”和“噪声阈值”
    //		ANAL_ERROR：运行过程出错 (此时，可调用GetErrMsg函数获取错误信息)

    int32_t GetAnalTime(int32_t ch);
    //	功能：获取指定通道当前的分析时间(采样点计数值)
    //	参数：
    //		int32_t ch: 指定的通道号

    char *GetErrMsg(int32_t ch);
    //	功能：获取指定通道分析过程出错时的错误信息
    //	参数：
    //		int32_t ch: 指定的通道号 (ch=-1转义为获取analysis.dll版本号, ch=-2转义为获取analysis.dll接口设置)	//2014-08-12: &&&&&&
    //	返回值: 错误信息
    //			(若当前状态码不为ANAL_ERROR，返回值为一空串""，并非NULL)

    BOOL TickAnal(int32_t ch);
    //	功能：显示指定通道当前分析过程出现的峰辨识标志
    //		  注：1) 在与ExecAnal同一个循环体中的谱图显示函数中调用;
    //			  2) 谱图显示函数(假定命名为ExecDraw)的调用应后于ExecAnal的调用
    //	参数：
    //		int32_t ch: 指定的通道号
    //	返回值:
    //		TRUE: 成功
    //		FALSE: 失败

    BOOL AnalOpened(int32_t ch);
    //	功能：判断指定通道是否已打开 (打开失败视为未打开)
    //	参数：
    //		int32_t ch: 指定的通道号
    //	返回值:
    //		TRUE: 已打开
    //		FALSE: 未打开，或打开失败

    BOOL AnalBusy(int32_t ch);
    //	功能：判断指定通道是否已启动分析过程(即“忙”)
    //	参数：
    //		int32_t ch: 指定的通道号
    //	返回值:
    //		TRUE: 已启动
    //		FALSE: 未启动，或未打开，或打开失败

    int32_t GetAnalOpened(int32_t **chArray);
    //	功能：获取所有已打开的通道号
    //	参数：
    //		int32_t **chArray: 通道号数组指针 (调用时不必为其分配内存)
    //	返回值: 所有已打开的通道数目

    int32_t GetAnalBusy(int32_t **chArray);
    //	功能：获取所有启动分析过程的通道号
    //	参数：
    //		int32_t **chArray: 通道号数组指针 (调用时不必为其分配内存)
    //	返回值: 所有已启动分析过程的通道数目

    BOOL SetUkPkFactor(int32_t ch, TUkPkFactor *lpUkPkFactor);
    //	功能：设置未知峰的校正因子

    BOOL SetIdtTimeOfs(int32_t ch, float fTimeOfs);
    //	功能：设置组分表的迁移时间[min]

    // 2008-10-14: ++++++
    BOOL SetYMinUnit(int32_t ch, double yMinUnit);
    //	功能：设置检测器最小度量单位(uV)到采集器最小信号单位(1uV)的转换系数(默认值=1)

    // 2010-06-05: ++++++
    BOOL SetIdtQualitMode(int32_t ch, int32_t nQualitMode, float fTimeWindow);
    //	功能：设置组分表的定性模式
    //	参数：
    //		int32_t nQualitMode: 定性模式 (0-时间带, 1-时间窗, 2-顺序法)
    //		float fTimeWindow: 时间窗[%]

    // 2012-12-13: ++++++
    BOOL SetXMinUnitK(int32_t ch, double xMinUnitK);
    //	功能：设置X轴标注单位(默认为min)到最小标注单位(计算面积之用, 默认为sec)的换算系数(XMinUnit=XMinUnitK*XUnit, 默认值=60)

    BOOL SetMiscellaneous(int32_t ch, uint64_t wParam, uint64_t lParam);
    //	功能：设置所有的杂项参数 (ch=-1转义为设定应用程序接口设置, lParam为接口设置指针)	//2014-08-12: &&&&&&

    BOOL EvalResult(TDLLRESINF *resInf, TDLLEPINF *epInf, TDLLIDTINF *idtInf, TDLLMETRIC *metric);
    //	功能：因改变计算方法或组分表，对已完成的积分结果进行重算，刷新结果表
    //	参数：
    //	返回值:
    //		TRUE: 成功
    //		FALSE: 失败

    BOOL EvalColumnPerf(TDLLResultListItem *pHead, int32_t pCount, int32_t *smpHead, float freq);
    //	功能：计算柱系统评价指标(W50、5σ、Plates、Resolution、Symmetry、M1、M2)
    //	参数：

    double EvalKHeightW(TDLLResultListItem *pHead, int32_t *smpHead, double k, float freq, double *lpWL, double *lpWR);
    //	功能：计算谱峰任意比例峰高出的左、右宽度
    //	参数：
    //		double k: 峰高比例系数(半高峰宽k=0.5, 1/4高峰宽k=0.25, 拖尾因子k=0.05)  //2011-03-09: &&&&&&
    //		double *lpWL: 左宽[min]指针
    //		double *lpWR: 右宽[min]指针
    //	返回值：宽度[min] (左宽+右宽)

    BOOL EvalColumnPerfEx(TDLLResultListItem *pHead, int32_t pCount, int32_t *smpHead, float freq, double xMinUnitK);
    //	功能：计算柱系统评价指标(W50、5σ、Plates、Resolution、Symmetry、M1、M2)
    //	参数：
    //		double xMinUnitK: X轴标注单位(默认min)到最小标注单位(算面积用,默认sec)的换算系数(XMinUnit=XMinUnitK*XUnit, 默认=60)

    double EvalKHeightWEx(TDLLResultListItem *pHead, int32_t *smpHead, double k, float freq, double xMinUnitK, double *lpWL, double *lpWR);
    //	功能：计算谱峰任意比例峰高出的左、右宽度
    //	参数：
    //		double k: 峰高比例系数(半高峰宽k=0.5, 1/4高峰宽k=0.25, 拖尾因子k=0.05)  //2011-03-09: &&&&&&
    //		double xMinUnitK: X轴标注单位(默认min)到最小标注单位(算面积用,默认sec)的换算系数(XMinUnit=XMinUnitK*XUnit, 默认=60)
    //		double *lpWL: 左宽[min]指针
    //		double *lpWR: 右宽[min]指针
    //	返回值：宽度[min] (左宽+右宽)

    BOOL EvalGroup(TDLLGRPINF *grpInf, TDLLRESINF *resInf);
    //	功能：对结果表进行分组计算
    //	参数：
    //		GRPINF *grpInf: 指定的分组表描述指针 (read only)
    //		RESINF *resInf: 指定的结果表描述指针 (modified)
    //	返回值:
    //		TRUE: 成功
    //		FALSE: 失败

    BOOL EvalCalibFact(TDLLSTDINF *stdInf, TEPara *epara, TDLLIDTINF *idtInf);
    //	功能：对指定的标样表完成校正因子计算
    //	参数：
    //		STDINF *stdInf: 指定的标样表描述指针 (read only)
    //		EPARA *epara: 指定的峰处理参数表指针 (read only)
    //		IDTINF *idtInf: 指定的组份表描述指针 (modified)
    //	返回值:
    //		TRUE: 成功
    //		FALSE: 失败

    // ****** 手动积分支持函数: ***************************

    /////////// 调整峰事件 ////////////////
    BOOL ManualPeakStart(int32_t ch, float startTime);
    //	功能：调整峰组起始点时间
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float startTime: 拟定的峰组起始时间(min.)
    //	返回值:
    //		TRUE：表示已修正了峰组起始点时间, 并重算结果表
    //		FALSE: 表示拟定的峰组起始点不合理

    BOOL ManualPeakEnd(int32_t ch, float endTime);
    //	功能：调整峰组结束点时间
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float endTime: 拟定的峰组结束时间(min.)
    //	返回值:
    //		TRUE：表示已修正了峰组结束点时间, 并重算结果表
    //		FALSE: 表示拟定的峰组结束点不合理

    BOOL ManualPeakMoveSplit(int32_t ch, float valleyTime);
    //	功能：移动分割线(调整峰谷点)
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float valleyTime: 拟定的峰谷点(min.)
    //	返回值:
    //		TRUE：表示已修正了峰谷点时间, 并重算结果表
    //		FALSE: 表示拟定的峰谷点不合理

    BOOL ManualPeakAddSplit(int32_t ch, float splitTime);
    //	功能：增加分割线
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float splitTime: 欲增加的分割线位置(min., 近似值)
    //	返回值:
    //		TRUE：成功, 并重算结果表
    //		FALSE: 失败.

    BOOL ManualPeakDelSplit(int32_t ch, float splitTime);
    //	功能：删除分割线
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float splitTime: 欲删除的分割线位置(min., 近似值)
    //	返回值:
    //		TRUE：成功, 并重算结果表
    //		FALSE: 失败.

    BOOL ManualPeakAddOnlyOne(int32_t ch, float beginTime, float endTime);
    //	功能：增加单一峰
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float beginTime: 拟定的峰起点(min.)
    //		float stopTime: 拟定的峰落点(min.)
    //	返回值:
    //		TRUE：成功, 并重算结果表(可能会重新调整起点及落点)
    //		FALSE: 失败, 表示拟定的起点或落点不合理,或顶点找不到

    BOOL ManualPeakDelete(int32_t ch, float beginTime, float endTime);
    //	功能：删除峰
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float beginTime: 事件的开始时间(min.)
    //		float stopTime: 事件的结束时间(min.)
    //	返回值:
    //		TRUE：成功, 并重算结果表
    //		FALSE: 失败.

    ////////// 调整基线事件 ///////////////////
    BOOL ManualBaseValley(int32_t ch, float beginTime, float endTime);
    //	功能：谷谷基线
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float beginTime: 事件的开始时间(min.)
    //		float stopTime: 事件的结束时间(min.)
    //	返回值:
    //		TRUE: 成功; 设置峰位及峰标志, 并重算结果表
    //		FALSE: 失败

    BOOL ManualBaseTogether(int32_t ch, float beginTime, float endTime);
    //	功能：强制垂切(峰合并)
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float beginTime: 事件的开始时间(min.)
    //		float endTime: 事件的结束时间(min.)
    //	返回值:
    //		TRUE: 成功; 设置相应的谷峰峰位及峰标志, 并重算结果表
    //		FALSE: 失败

    BOOL ManualBaseTailTangent(int32_t ch, float beginTime, float endTime);
    //	功能：强制拖尾(后切线切割)
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float beginTime: 事件的开始时间(min.)
    //		float endTime: 事件的结束时间(min.)
    //	返回值:
    //		TRUE: 成功; 设置相应的拖尾峰位及峰标志, 并重算结果表
    //		FALSE: 失败

    BOOL ManualBaseFrontTangent(int32_t ch, float beginTime, float endTime);
    //	功能：前切线切割
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float beginTime: 事件的开始时间(min.)
    //		float endTime: 事件的结束时间(min.)
    //	返回值:
    //		TRUE: 成功; 设置相应的拖尾峰位及峰标志, 并重算结果表
    //		FALSE: 失败

    // 以下事件函数暂定为空：

    BOOL ManualBaseForwHori(int32_t ch, float beginTime, float endTime);
    //	功能：向前水平基线
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float beginTime: 事件的开始时间(min.)
    //		float stopTime: 事件的结束时间(min.)
    //	返回值:
    //		TRUE：成功, 并重算结果表
    //		FALSE: 失败.

    BOOL ManualBaseBackHori(int32_t ch, float beginTime, float endTime);
    //	功能：向后水平基线
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float beginTime: 事件的开始时间(min.)
    //		float stopTime: 事件的结束时间(min.)
    //	返回值:
    //		TRUE：成功, 并重算结果表
    //		FALSE: 失败.

    ////////// 调整峰辨识参数事件 ///////////
    BOOL ManualParaWidth(int32_t ch, float beginTime, float endTime, float pkWidth);
    //	功能：调整峰宽参数
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float beginTime: 事件的开始时间(min.)
    //		float stopTime: 事件的结束时间(min.)
    //		float pkWidth: 拟定的峰宽参数值
    //	返回值:
    //		TRUE：成功, 并重算结果表
    //		FALSE: 失败.

    BOOL ManualParaNoise(int32_t ch, float beginTime, float endTime, float pkNoise);
    //	功能：调整噪声参数
    //	参数：
    //		int32_t ch: 指定的通道号
    //		float beginTime: 事件的开始时间(min.)
    //		float stopTime: 事件的结束时间(min.)
    //		float pkNoise: 拟定的峰宽参数值
    //	返回值:
    //		TRUE：成功, 并重算结果表
    //		FALSE: 失败.

    ////////// 其他: //////////////////////
    BOOL UpdateResult(int32_t ch, int32_t pStart, int32_t pEnd);
    //	功能：基于手动积分事件更新指定通道的结果表(及分组表)
    //	参数：
    //		int32_t ch: 指定的通道号
    //		int32_t pStart: 事件作用于结果表的起始峰号(从0号开始)
    //		int32_t pEnd: 事件作用于结果表的结束峰号(从0号开始)
    //	返回值:
    //		TRUE: 成功
    //		FALSE: 失败

    // double CvtConcToAmt(double conc, TDLLMETRIC *metric, METHOD method);
    double CvtConcToAmt(double conc, TDLLMETRIC *metric, int32_t method);
    //	功能：将标样浓度表(StdCpt)中的组份浓度转换为组份用量
    //	参数：
    //		double conc: 组份浓度
    //		METRIC *metric: 标样计量信息结构指针
    //		METHOD method: 定量方法
    //	返回值：组份用量(绝对值)

    double CvtConcToAmtByIstd(double conc, TDLLMETRIC *metric);
    //	功能：将标样浓度表(StdCpt)中的组份浓度转换为组份用量
    //	参数：
    //		double conc: 组份浓度
    //		METRIC *metric: 标样计量信息结构指针
    //		METHOD method: 定量方法
    //	返回值：组份用量(绝对值)

    //********** 自动峰参数学习函数 ********************
    BOOL LearnAutoPara(AUTOPOOL *autoPool, float freq, AUTOPARA *autoPara);
    //	功能: 自动峰参数学习
    //	参量:
    //		AUTOPOOL *autoPool: 学习池结构指针
    //		float freq: 采样频率
    //		AUTOPARA *autoPara: 自动峰参数结构指针
    //	返回值: TRUE

    BOOL MakeAutoPara(int32_t *buf, int32_t len, float freq, AUTOPARA *autoPara);
    //	功能: 自动峰参数学习
    //	参量:
    //		int32_t *buf: 学习样本数据缓冲区
    //		float freq: 采样频率
    //		AUTOPARA *autoPara: 自动峰参数结构指针
    //	返回值: TRUE

    BOOL LearnAutoIPara(AUTOPOOL *autoPool, float freq, AUTOIPARA *autoIPara);
    //	功能: 自动峰参数学习
    //	参量:
    //		AUTOPOOL *autoPool: 学习池结构指针
    //		float freq: 采样频率
    //		AUTOIPARA *autoIPara: 自动峰参数结构指针
    //	返回值: TRUE

    BOOL MakeAutoIPara(int32_t *buf, int32_t len, float freq, AUTOIPARA *autoIPara);
    //	功能: 自动峰参数学习
    //	参量:
    //		int32_t *buf: 学习样本数据缓冲区
    //		float freq: 采样频率
    //		AUTOIPARA *autoIPara: 自动峰参数结构指针
    //	返回值: TRUE

    BOOL MdyAnalStopTime(int32_t ch, float fMinutes);
    //	功能: 修改指定通道的分析停止时间
    //	参数:
    //		int32_t ch: 指定的通道号
    //		float fMinutes: 新的分析停止时间
    //	注意: 当在实时采样的过程中加大了分析时长时,务必调用该函数 ////////

    BOOL MdyPeakSmpHead(int32_t ch, int32_t *pSmpHead);
    //	功能: 修改指定通道的谱图数据缓区头  //// (应与MdyAnalStopTime配套使用)
    //	参数:
    //		int32_t ch: 指定的通道号
    //		int32_t* pSmpHead: 新的谱图数据缓区头
};

#endif
